SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS OFF
GO
CREATE PROCEDURE [dbo].[spCalcularPuntajesARecalcularFabio] 



-- Parametros

@convocatoria INT,
@agente INT

AS

set nocount on --para anular el trafico econ el cliente (no salen los print)

-- Variables Locales
DECLARE @tempFormula VARCHAR(100)
DECLARE @concepto INT
DECLARE @inscripcion INT
DECLARE @error INT

BEGIN TRANSACTION

	
	IF EXISTS(
			SELECT * FROM tb_CalificacionesDeInscripcion CI 
				INNER JOIN tb_InscripcionesConvocatorias I ON I.IdInscripcionConvocatoria = CI.Inscripcion 
				INNER join tb_conceptosDePuntaje p ON CI.Concepto=p.idconcepto 
				INNER JOIN tb_Convocatorias C ON C.IdConvocatoria = I.Convocatoria 
				INNER JOIN tb_Agentes A ON A.IdAgente = I.Agente 
			WHERE C.IdConvocatoria = @convocatoria AND A.Documento = @agente and recalcular='S')
		 BEGIN
		
			DELETE CI
			FROM tb_CalificacionesDeInscripcion CI 
			INNER JOIN tb_InscripcionesConvocatorias I ON I.IdInscripcionConvocatoria = CI.Inscripcion
			INNER JOIN tb_Convocatorias C ON C.IdConvocatoria = I.Convocatoria
			inner join tb_conceptosDePuntaje p on CI.Concepto=p.idconcepto 
			INNER JOIN tb_Agentes A ON A.IdAgente = I.Agente
			WHERE C.IdConvocatoria = @convocatoria AND A.Documento = @agente and recalcular='S'

		END



	DECLARE XZ CURSOR FOR

	SELECT CP.FormulaPuntaje, CP.IdConcepto, IC.IdInscripcionConvocatoria
	FROM tb_ConceptosDePuntaje CP INNER JOIN tb_TiposDeConvocatorias TC ON CP.TipoConvocatoria = TC.IdTipoConvocatoria 
	INNER JOIN tb_Convocatorias C ON C.TipoConvocatoria = TC.IdTipoConvocatoria
	INNER JOIN tb_InscripcionesConvocatorias IC ON IC.Convocatoria = C.IdConvocatoria
	WHERE C.IdConvocatoria = @convocatoria AND CP.FormulaPuntaje IS NOT NULL AND IC.NecesitaRecalcular = 'S' and CP.Recalcular='S'

	OPEN XZ

	FETCH NEXT FROM XZ INTO @tempFormula, @concepto, @inscripcion

	WHILE @@FETCH_STATUS = 0 BEGIN
	
		DECLARE @temp2 VARCHAR(1000)
		SELECT @temp2 = 'DECLARE @puntaje FLOAT ' + char(10) + 'SET @puntaje = 0 ' + char(10)
		SELECT @temp2 = @temp2 + 'EXEC ' +@tempFormula + ' ' + convert(varchar, @inscripcion) + ', @puntaje output, 0' + char(10)
		SELECT @temp2 = @temp2 + 'INSERT INTO tb_CalificacionesDeInscripcion(Inscripcion, Concepto, Puntaje) VALUES(' + convert(varchar, @inscripcion) + ', ' + convert(varchar, @concepto) +', ISNULL(@puntaje, 0))'
		EXEC(@temp2)

		IF @@error <> 0 BEGIN
			SELECT @error = @@error
			GOTO Salir
		END

		FETCH NEXT FROM XZ INTO @tempFormula, @Concepto, @inscripcion
	END

	CLOSE XZ
	DEALLOCATE XZ



Salir:
IF @error <> 0 BEGIN
	--CLOSE XZ
	--DEALLOCATE XZ
	DECLARE @temp1 VARCHAR(100)
	SET @temp1 = 'ERROR EN EL PROC ' + @tempFormula  
	RAISERROR(@temp1, 16, 1)
	PRINT('ROLLBACK')
	--ROLLBACK TRANSACTION
END
ELSE BEGIN
	PRINT('COMMIT')
	--CLOSE XZ
	--DEALLOCATE XZ
	COMMIT TRANSACTION
END
GO
